package org.medusa.config;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 
 * @author Kevion.
 */
public final class ConfigFile/* ConfigurationFile */{

	/**
	 * 从ini配置文件中读取变量的值 　　
	 * 
	 * @param file
	 *            :配置文件的路径 　　
	 * @param section
	 *            :要获取的变量所在段名称
	 * @param variable
	 *            :要获取的变量名称 　　
	 * @param defaultValue
	 *            :变量名称不存在时的默认值 　
	 * @return 变量的值 　　
	 * @throws IOException
	 *             :抛出文件操作可能出现的io异常 　　
	 */
	public static String Read(String file, String section, String variable,
			String defaultValue) {
		String line;
		String value = defaultValue;
		BufferedReader bufferedReader = null;

		try {
			bufferedReader = new BufferedReader(new FileReader(file));
			while ((line = bufferedReader.readLine()) != null) {
				line = line.trim().split("#")[0];
				//if()
				Pattern p;
				Matcher m;
				
				p = Pattern.compile("\\[\\s*" + section + "\\s*\\]");
				m = p.matcher(line);
				if (!m.matches())
					continue;
				/*
				p = Pattern.compile("\\[\\s*.*\\s*\\]");
				m = p.matcher((strLine));
				if (m.matches()) {
					p = Pattern.compile("\\[\\s*" + section + "\\s*\\]");
					m = p.matcher(strLine);
					if (!m.matches())
						break;
				}*/

				line = line.trim();
				String[] strArray = line.split("=");
				if (strArray.length == 1) {
					value = strArray[0].trim();
					if (value.equalsIgnoreCase(variable))
						value = "";
				} else if (strArray.length == 2) {
					value = strArray[0].trim();
					if (value.equalsIgnoreCase(variable))
						value = strArray[1].trim();
				} else if (strArray.length > 2) {
					value = strArray[0].trim();
					if (value.equalsIgnoreCase(variable))
						value = line.substring(line.indexOf("=") + 1)
								.trim();
				}

			}// while
			bufferedReader.close();
		} catch (FileNotFoundException e) {

		} catch (IOException e) {

		}
		return value;
	}

	/**
	 * 修改ini配置文件中变量的值
	 * 
	 * @param file
	 *            配置文件的路径
	 * @param section
	 *            要修改的变量所在段名称
	 * @param variable
	 *            要修改的变量名称
	 * @param value
	 *            变量的新值
	 * @throws IOException
	 *             抛出文件操作可能出现的io异常
	 */
	public static boolean Write(String file, String section, String variable,
			String value) {
		String fileContent, allLine, strLine, newLine, remarkStr;
		String getValue;
		BufferedReader bufferedReader = null;
		fileContent = "";
		boolean ret = false;
		try {
			bufferedReader = new BufferedReader(new FileReader(file));
			while ((allLine = bufferedReader.readLine()) != null) {
				allLine = allLine.trim();
				if (allLine.split("[;]").length > 1) {
					remarkStr = ";" + allLine.split(";")[1];
				} else {
					remarkStr = "";
				}
				strLine = allLine.split(";")[0];
				Pattern p;
				Matcher m;
				p = Pattern.compile("\\[\\s*.*\\s*\\]");
				m = p.matcher((strLine));
				if (m.matches()) {
					p = Pattern.compile("\\[\\s*" + section + "\\s*\\]");
					m = p.matcher(strLine);
					if (m.matches())
						break;
				}

				strLine = strLine.trim();
				String[] strArray = strLine.split("=");
				getValue = strArray[0].trim();
				if (getValue.equalsIgnoreCase(variable)) {
					newLine = getValue + " = " + value + " " + remarkStr;
					fileContent += newLine + "\r\n";
					while ((allLine = bufferedReader.readLine()) != null) {
						fileContent += allLine + "\r\n";
					}
					bufferedReader.close();
					BufferedWriter bufferedWriter = new BufferedWriter(
							new FileWriter(file, false));
					bufferedWriter.write(fileContent);
					bufferedWriter.flush();
					bufferedWriter.close();

					ret = true;
				}

				fileContent += allLine + "\r\n";
			}
		} catch (FileNotFoundException e) {

		} catch (IOException e) {

		}

		return ret;
	}

	/**
	 * 程序测试
	 */
	public static void Test() {
		System.out.println(ConfigFile.Write("~/1.ini", "Settings", "SampSize",
				"111"));
	}
}
